perm filename EMAIN4.2[EAL,HE]2 blob
sn#704721 filedate 1983-03-27 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 {$NOMAIN Editor: Statement executor for immediate mode }
C00006 00003 procedure eDoStmnt external
C00009 ENDMK
C⊗;
{$NOMAIN Editor: Statement executor for immediate mode }
%include emain.hdr;
{ Externally defined routines from elsewhere: }
(* From ALLOC *)
function newStatement: statementp; external;
procedure relStatement(n: statementp); external;
(* From CALLER *)
procedure emAddStmnt(firstTime: boolean; which: integer); external;
(* From ETOKEN *)
procedure getToken; external;
(* From EAUX1A *)
procedure pushStmnt(s: statementp; indent: integer); external;
(* From EAUX1C *)
procedure relExpr(n: nodep); external;
(* From EEXPAR *)
function exprParse: nodep; external;
(* From EPAR3A *)
procedure assignParse(st: statementp; np: nodep); external;
(* From EPAR3C *)
function declarationp: boolean; external;
(* From EPAR3D *)
function addNewDeclarations: integer; external;
(* From EAUX3B *)
procedure collectStmnt(s: statementp); external;
(* From EDEBUG *)
procedure executeStmnt(st: statementp; which: integer); external;
procedure pevalExpr(n: nodep; which: integer); external;
(* From PP *)
function getLine(length: integer): linerecp; external;
procedure relLine(l: linerecp); external;
procedure ppLine; external;
procedure ppOutNow; external;
procedure ppChar(ch: ascii); external;
procedure pp5(ch: c5str; length: integer); external;
procedure pp10(ch: cstring; length: integer); external;
procedure pp10L(ch: cstring; length: integer); external;
procedure pp20(ch: c20str; length: integer); external;
procedure pp20L(ch: c20str; length: integer); external;
procedure ppInt(i: integer); external;
procedure ppReal(r: real); external;
procedure ppStrng(length: integer; s: strngp); external;
procedure ppDtype(d: datatypes); external;
procedure ppDelChar; external;
procedure em4Get; external;
procedure em4Get; begin end;
procedure eDoStmnt; external;
procedure eDoStmnt;
var s,sp: statementp; b: boolean; n: nodep;
i: integer;
begin
with curToken do
begin
backUp := true;
n := exprParse; (* see what we're to evaluate *)
getToken; (* & check if followed by an ":=" *)
if (ttype = reswdtype) and (rtype = stmnttype) and
(stmnt = assigntype) then (* Is it an assignment? *)
begin (* Yes - need to parse it *)
s := newStatement;
s↑.stype := assigntype;
sParse := true;
fParse := true;
backup := true;
assignParse(s,n);
sParse := false;
fParse := false;
i := addNewDeclarations;
collectStmnt(s); (* if collecting add stmnt to prog *)
executeStmnt(s,4); (* go do it *)
end
else pevalExpr(n,4); (* eval & print out expr *)
end
end;
procedure eDoOtherCmd; external;
procedure eDoOtherCmd;
var i: integer; s: statementp;
begin
with curToken do
begin
backUp := true;
if declarationp then
begin
backUp := true;
emAddStmnt(false,4); (* Use overlay caller *)
end
else
begin (* have parser parse it *)
i := cursor;
sParse := true;
fParse := true;
backup := true;
s := newStatement;
s↑.stype := emptytype;
curLine := 0;
pushStmnt(s,0); (* so addStmnt will work right *)
sCursor := cursor;
i := cursorLine;
cursorLine := 1;
newDeclarations := nil;
emAddStmnt(false,4);
cursor := sCursor - 1; (* restore cursor *)
cursorLine := i;
sParse := false;
fParse := false;
i := addNewDeclarations;
if s↑.stype = emptytype then relStatement(s)
else
begin
collectStmnt(s); (* if collecting add stmnt to prog *)
executeStmnt(s,4); (* go do it *)
end;
end
end
end;